▌Docker 端口映射原理 Docker 利用 iptables 来实现端口映射,使得容器内的服务能够通过宿主机的公共端口与外界通信。 ▌常见写法与案例分析基本端口映射docker container run -d -p 88:80 nginx:1.20.1在这个命令中,我们将宿主机的 88 端口映射到容器内部的 80 端口,使得任何访问宿主机 存储卷 在 Docker 的世界里,容器是短暂的,而数据需要持久化。Docker 数据卷作为解决这一矛盾的关键技术,允许用户将数据持久化存储,并在容器间共享数据。 数据卷的备份与迁移数据卷的备份与迁移是 Docker 数据管理中的重要部分。由于数据卷独立于容器的生命周期,它们为数据的备份和迁移提供了便利。 小结 Docker 的端口映射和存储卷是构建和运行容器化应用的关键特性。端口映射允许外部访问容器内部的服务,而存储卷提供了数据持久化和共享的解决方案。
Docker存储卷 1、COW机制 Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。 而要想绕过这种限制,我们可以通过使用存储卷的机制来实现。 2、什么是存储卷 存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。 在宿主机上的这个与容器形成绑定关系的目录被称作存储卷。 Docker的存储卷默认情况下是使用其所在的宿主机上的本地文件系统目录的,也就是说宿主机上有一块属于自己的硬盘,这个硬盘并没有共享给其他的Docker主机,而在这台主机上启动的容器所使用的存储卷是关联到此宿主机硬盘上的某个目录之上 ,是由容器引擎daemon自行创建一个空的目录,或者使用一个已经存在的目录,与存储卷建立存储关系,这种方式极大解脱用户在使用卷时的耦合关系,缺陷是用户无法指定那些使用目录,临时存储比较适合; 7、
1、数据卷的作用 image.png 查看数据卷 docker volume ls docker volume inspect xxx 清理无用、删除 docker volume prune docker volume rm xx 创建/var/lib/docker/volumes docker volume create -d local test 挂载数据卷 docker run -d -name centos /bin/bash 多个-v,挂载多个数据卷 数据卷容器,容器间数据共享 docker run -it -v /dbdata:/dbdata --name dbdata centos centos 备份和恢复数据卷 image.png 2、端口映射 -P 大写的P会随机映射一个49000-49900端口到内部容器开放的网络端口 -p ip:80:80 -p 80:80 docker port xxx #查看端口映射 3、容器互联(不用端口映射) docker run -itd --name db mysql /bin/bash docker run -itd -P --name
docker存储卷 数据卷 为什么需要数据卷(存储卷) docker镜像由多个只读层叠加而成,启动容器时,docker会加载只读镜像层,并在镜像层添加一个读写层 如果运行中的容器修改了现有的一个已经存在的文件 关闭并重启容器,其数据不受影响,但是删除容器,则其更改将会全部丢失 存在的问题: 存储与联合文件系统中,不易于宿主机访问 容器键数据共享不便 删除容器其数据会丢失 卷 什么是卷 卷是容器上的一个或者多个目录 ,此类目录可以绕过联合文件系统,与宿主机上的某个目录可以绑定(关联) 设置随机卷 [root@centos7-node1 ~]# docker run --name mybbox5 -it -v /mydata 绑定本地指定目录到容器的卷 特点: 删除容器之后本地目录不会被删除,数据还在 可以脱离容器的生命周期而存在 若有NFS存储的话,数据也可以脱离本机而存在 可以实现容器间数据的共享 ? 思路 这三个应用的容器在同一网络层 配置文件和数据文件需要和本地使用绑定卷存储 [root@centos7-node1 ~]# mkdir /data/volumes/mysql [root@centos7
一、存储卷概念 什么是存储卷? Docker 存储卷 是 Docker 容器中用于持久化存储数据的独立文件系统区域。它独立于容器的联合文件系统,其生命周期可以完全独立于创建它的容器。 ,与存储卷建立存储关系,这种方式极大解脱用户在使用卷时的耦合关系,缺陷是用户无法指定那些使用目录,临时存储比较适合; 绑定数据卷(bind mount)。 2.1 管理卷 创建卷 方法一:Volume命令操作 命令清单: docker volume create:创建存储卷 docker volume inspect:显示存储卷详细信息 docker volume 注意2:容器删除卷的数据不会删除,除非用 docker volume rm 删除。因为卷本身就是来保护数据的。 注意3:卷共享。不同容器可以使用同一个卷,解决了容器与容器之间数据交互繁琐的问题。 配置文件、源代码、日志文件(在主机和容器间共享) 备份与迁移 使用 docker volume 命令操作,相对简单 需要操作主机文件系统,复杂度高 2.3 临时数据卷 临时卷 tmpfs:临时卷数据位于内存中
Docker端口映射与容器互联 写在前面 在前面我们已经掌握了单个容器的管理操作,但是在实际工作中很少是只运行一个容器,而更多的是需要运行多个容器进行协作的情况,因此就需要多个容器之间能够互相访问到对方的服务 ,那么本篇文章就来学习Docker端口映射与容器互联相关的知识,注意本文所提到的宿主机是指VMware虚拟机,而非本地的Windows系统主机。 端口映射 Docker除了通过网络访问外,还提供了其他两个非常方便的功能来满足服务访问的基本需求,一是允许映射容器内应用的服务端口到本地宿主机端口;二是使用互联机制来实现多个容器间通过容器名来快速访问。 :32768 或者查看容器的5000端口映射信息: [root@envythink ~]# docker port eyou 5000 127.0.0.1:32768 如果想查看容器的完整详细信息, 小结 本篇文章主要学习了Docker容器服务的两大基本操作,包括基础的端口映射机制和容器互联机制。其实Docker也支持Linux系统自带的网络服务和功能。
如果想要实现远程访问,需要借助网络存储来实现。Docker 的 local 存储模式并未提供配额管理,因此在生产环境中需要手动维护磁盘存储空间。 容器与容器之间数据共享 那如何实现容器与容器之间数据共享呢?下面我举例说明。 首先使用docker volume create命令创建一个共享日志的数据卷。 主机与容器之间数据共享 Docker 卷的目录默认在 /var/lib/docker 下,当我们想把主机的其他目录映射到容器内时,就需要用到主机与容器之间数据共享的方式了,例如我想把 MySQL 容器中的 volume create 创建数据卷,然后需要共享数据卷的容器启动的时候都使用mount参数挂载相同的数据卷 主机与容器之间的数据共享 docker run -v 可以映射主机目录到容器中 那你了解完卷的相关操作后 结语 到此,相信你已经了解了 Docker 使用卷做持久化存储的必要性,也了解 Docker 卷的常用操作,并且对卷的实现原理也有了较清晰的认识。
一、前言 通常我们的应用都需要对外提供访问,另外也往往不是独立运行的,基本都会使用MySQL、Redis等数据库存储数据,并且应用之间也会存在互相访问的情况,本文主要介绍容器端口的开放与绑定,以及基于Docker Network的容器互联 1、本文主要内容 使用Golang构建HTTP Server,并使用Redis进行访问计数 Docker 镜像开放端口及端口映射 Docker Network介绍及使用 基于 build -t helloworld . 3、运行&测试 创建并运行容器并将本机的9000端口映射到容器端口8000 docker run -d --name myhello -p 9000:8000 ---ken.io 三、容器互联 Docker提供了网络模块,可以方便地创建、管理虚拟网络,以实现容器与宿主机,以及容器跟容器之间的网络通信,Docker network提供了bridge、host、overlay 入门:使用数据卷、文件挂载进行数据存储与共享 下一篇:Docker入门:使用Docker Compose进行容器编排
Docker端口映射 在实践中,经常会碰到需要多个服务组件容器共同协作的情况,这往往需要多个容器之间有能够互相访问到对方的服务,Docker提供了两个很方便的功能来满足服务访问的基本需求:一个是允许映射容器内应用的服务端口到本地宿主主机 ◆从外部访问容器应用◆ 随机分配端口: 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p参数来指定端口映射.当使用-P(大写的)标记时,Docker会随机映射一个49000~49900 </body></html> ◆映射所有接口地址◆ 映射指定端口: 格式将容器的80端口映射到本机的80端口. ◆映射到指定地址◆ 映射到指定地址的指定端口: 将容器中的80端口映射到本地指定IP地址上去. 拓展与实战例子 ◆Apache◆ Apache是世界使用排名第一的Web服务器软件,它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.它快速、
当我们在容器中安装完环境以后,需要在宿主机的端口上访问到容器中的端口,这时候就需要做端口映射。 之前运行镜像的时候,没有做端口映射,在容器中安装完软件,想再做端口映射,需要把这个运行中的容器提交为一个新的镜像 docker commit 容器id 镜像名 提交完新镜像后,再次运行镜像为容器, 这里就需要使用-p和-v参数进行端口映射与目录共享的设置 我自己所运行的所有命令: docker ps -a docker commit a84404b938fe lnmp_tsh docker image ls docker run -it -p 80:80 -p 3306:3306 -v /var/www/html/:/var/www/html/ lnmp_tsh bash 查看容器ID,提交容器成新的镜像 ,查看镜像,运行端口映射和目录共享到新的容器 ?
将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口 -d:后台运行容器 nginx:镜像名称,例如nginx 这里的-p参数,是将容器端口映射到宿主机端口。 --name:指定容器名称 -p:指定端口映射 -d:让容器后台运行 查看容器日志的命令: docker logs 添加 -f 参数可以持续查看日志 查看容器状态: docker 这就是因为容器与数据(容器内文件)耦合带来的后果。 要解决这个问题,必须将数据与容器解耦,这就要用到数据卷了。 小结: 数据卷的作用: 将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全 数据卷操作: docker volume create:创建数据卷 docker volume ls:查看所有数据卷 volume名称:容器内目录 -v 宿主机文件:容器内文 -v 宿主机目录:容器内目录 数据卷挂载与目录直接挂载的 数据卷挂载耦合度低,由docker来管理目录,但是目录较深,不好找
Docker 从入门到实战教程(三):Docker 容器网络与数据管理 | Docker 网络配置、数据卷使用与持久化存储 摘要: 本文是《Docker 从入门到实战》的第三篇,全面介绍了 Docker 若要让容器与外部网络(如外部数据库、Web 服务等)进行通信,可以使用端口映射或配置 Overlay 网络。 端口映射示例: docker run -d -p 8080:80 --name mycontainer nginx 该命令将容器的 80 端口映射到宿主机的 8080 端口。 为了避免这一问题,Docker 提供了多种持久化存储的方式,确保容器数据在容器生命周期之外得以保存。 3.1 使用数据卷实现持久化 数据卷是 Docker 提供的持久化存储方式。 3.2 使用外部存储 除了 Docker 的本地数据卷,用户也可以使用外部存储系统(如 NFS、Ceph、Amazon EBS 等)来实现持久化存储。这适用于需要跨多个主机或高可用的场景。
在我们的场景里,三台 AlmaLinux 主机(master、node1、node2)上用 Docker 运行 MySQL 主从容器,主机文件系统、卷管理、容器存储驱动之间就像房东、仓库管理员和租户,缺少明确分工就会闹乌龙 Docker 存储驱动(overlay2 等) 类似租户在房间里贴的透气墙纸,隔离不同容器的读写层。 Docker 卷(Volume) 就是租户从公共仓库(宿主机)申请的专属储物箱,用来持久化数据。 它们的关系就像:房东(宿主机 FS)提供房间,仓库管理员(LVM)动态分配仓储空间,租户(Docker 容器)用不同存储驱动隔离,租户的数据(数据库文件)放在他们专属的储物箱(卷)里。 5.3 查看和清理卷 # 列出所有卷 docker volume ls # 查看卷详情 docker volume inspect mysql-data # 删除未使用的卷 docker volume 六、把 LVM 与 Docker 卷结合:高级玩法 如果你想把逻辑卷直接当作 Docker 卷的底层存储,可以: 在宿主机挂载逻辑卷已在四步挂载到 /data/mysql。
一句话承诺:两个 YAML 跑通 Pod 动态存储卷挂载。 name: fast provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer PVC 与 常见坑与替代法 坑:PVC Pending。替代:检查 StorageClass 与 PV 供给。 坑:权限不匹配。替代:fsGroup 设置权限。 下一篇预告 K8s 滚动更新与回滚:部署策略与命令清单。
数据卷的备份与恢复 -备份- 注: -v指定数据卷时,如果数据卷不存在则自动创建。 //可以看到新增的文件夹与文本文件 3.数据卷备份 命令详解: 使用nginx基础镜像新建一个临时的容器(不放入后台运行),数据共享容器nginx的数据卷web,并且-v 指定将本机的/root/test webdata数据卷的数据,再启动一个新容器挂载webdata数据卷查看数据 [root@localhost ~]# docker run -itd --name webtest -v webdata: 中的数据 ---- Mysql容器数据卷的备份与恢复问题? 问题: 使用上面nginx数据卷备份恢复的方法对mysql容器数据卷进行备份与恢复,在备份与恢复的过程都能够看到新建的test库,但是恢复之后数据库中就是没有test库,不知道是什么问题?
当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-p或-P参数来指定端口映射。 当使用-P(大写P)标记时,Docker会随机映射一个端口到内部容器开放的网络端口 1、-P随机端口 通过docker ps命令查看具体端口映射 [root@localhost opt]# docker 6、查看端口映射情况 [root@localhost opt]# docker port nginx_1 80/tcp -> 0.0.0.0:32769 [root@localhost opt]# docker @localhost opt]# docker port nginx_5 80/tcp -> 192.168.110.133:32768 二、数据卷与数据卷容器 使用容器时会产生一些日志或其他文件,或是我们需要把容器内的数据进行备份 容器中管理数据主要有两种方式: 数据卷:挂载宿主系统的存储空间 数据卷容器:挂载容器的存储空间 如果用户需要在容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器,数据卷容器其实是一个普通的容器
相关文章推荐: 云原生存储详解:云原生应用的基石 云原生存储详解:容器存储与 K8s 存储卷 云原生存储的两个关键领域:Docker 存储卷、K8s 存储卷; Docker 存储卷:容器服务在单节点的存储组织形式 Docker数据卷插件 Docker 数据卷实现了将容器外部存储挂载到容器文件系统的方式。为了扩展容器对外部存储类型的需求,docker 提出了通过存储插件的方式挂载不同类型的存储服务。 Docker Daemon 与 Volume driver 通信方式有: Sock文件:linux 下放在/run/docker/plugins 目录下 Spec文件:/etc/docker/plugins K8s 是一个容器编排系统,其关注的是容器应用在整个集群的管理和部署形式,所以在考虑 K8s 应用存储的时候就需要从集群角度考虑。K8s 存储卷定义了在 K8s 系统中应用与存储的关联关系。 其设计意图是:存储与应用编排分离,将存储细节抽象出来并实现存储的编排(存储卷)。这样 K8s 中存储卷对象独立于应用编排而单独存在,在编排层面使应用和存储解耦。
Docker Docker容器数据卷 是什么? 先来看看Docker的理念: 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的 容器之间希望有可能共享数据 Docker容器产生的数据,如果不通过 卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性: 卷的设计目的就是数据的持久化 (5)执行dockerfile中的下一条指令直到所有指令都执行完成 总结 从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段, * Dockerfile Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。
提高数据操作的容错性 支持快速 restore 存储快照用户接口-Snapshot K8s 中通过 pvc 以及 pv 的设计体系来简化用户对存储的使用,而存储快照的设计其实是仿照 pvc & pv 当用户需要存储快照的功能时,可以通过 VolumeSnapshot 对象来声明,并指定相应的 VolumeSnapshotClass 对象,之后由集群中的相关组件动态生成存储快照以及存储快照对应的对象 创建存储快照 恢复存储快照 根据 PVC 创建 PV 对象时,对应的存储数据是从 VolumeSnapshot 关联的 VolumeSnapshotContext restore 出来的 拓扑 Topolopy 这里创建存储跟之前讲解的 csi-provisioner 有一个不太一样的地方,就是它里面还指定了 Snapshot 的 ID,当去云厂商创建存储时,需要多做一步操作,即将之前的快照数据恢复到新创建的存储中 之后流程返回到 csi-provisioner,它会将新创建的存储的相关信息写到一个新的 PV 对象中 新的 PV 对象被 PV controller watch 到它会将用户提交的 PVC 与 PV
提供HTTP服务,将日志写入磁盘,并制作镜像 数据卷绑定、文件挂载、tmpfs缓存挂载优点与特性介绍 将数据卷(Volume)绑定到容器指定目录,实现容器数据的持久化存储与共享 将宿主机文件/目录挂载( 7.87 本文中使用命令如非专门说明,均在Windows cmd中执行,如使用macOS,可以替换为对应命令操作 二、数据卷与挂载 1、数据卷(Volume) 数据卷(Volume)是Docker官方推荐的数据持久化存储方式 ,也是目前最成熟的Docker持久化存储方案,它具备以下优点/特性 数据卷比绑定挂载(Bind mounts)更容易备份或迁移 数据卷可以通过 Docker CLI 命令或 Docker API 进行管理 数据卷适用于 Linux 和 Windows 容器 数据卷支持存储在远端主机上,并支持加密存储 数据卷的数据不支持在宿主机上直接查看或管理 数据卷可以在宿主机上预先占用空间,以免磁盘被占用导致容器无法正常运行 ---- 系列名称:Docker入门教程 上一篇:Docker入门:使用Dockerfile构建Docker镜像 下一篇:Docker入门:端口映射与容器互联